package com.auth.Sercurity.controller;


import com.auth.Sercurity.model.DemoTaskApply;
import com.auth.Sercurity.model.DemoUser;
import com.auth.Sercurity.service.DemoUserService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author： hj
 * @version： 1.0
 * @fileDes：  用户申请流程Demo
 * @date： 2022/4/2 22:05
 */
@RestController
@RequestMapping("demoUser")
public class DemoProcessController {


    @Resource
    DemoUserService demoUserService;


    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  查看全部用户
     * @date： 2022/4/3 9:00
     */
    @GetMapping("/findUserAll")
    public List<DemoUser> findUser(){
        return demoUserService.findAll();
    }
    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  查看任务列表
     * @date： 2022/4/3 9:00
     */
    @GetMapping("/findUser")
    public IPage<DemoTaskApply> findTaskAll(Long pageNo, Long pageSize){
        return demoUserService.findTaskAll(pageNo,pageSize);
    }

    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  流程定义部署
     * @date： 2022/4/3 9:00
     */
    @GetMapping("deplyProcess")
    public String deplyProcess(){
//        获得引擎
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
//        获取RepositoryService
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
//          部署
        Deployment deploy = repositoryService.createDeployment().addClasspathResource("bpmn/DemoUserApplyLeave.bpmn").name("UserDemo请假申请").deploy();
        System.out.println("流程--ID：" + deploy.getId() + "流程名" + deploy.getName() + "部署成功");
        return "流程--ID："+deploy.getId()+"流程名"+deploy.getName()+"部署成功";
    }

    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  查看所有流程定义
     * @date： 2022/4/3 9:07
     */
    @GetMapping("queryProcess")
    public String queryProcess(){
//        获取引擎
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        获取RepositoryService
        RepositoryService repositoryService = engine.getRepositoryService();
//        查看
        List<Deployment> list = repositoryService.createDeploymentQuery().processDefinitionKey("DemoUserProcess").list();
        System.out.println(list.toString());
        return list.toString();
    }

    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  启动一个流程定义
     * @date： 2022/4/3 9:05
     */
    @GetMapping("{userId}/startProcess")
    public String startProcess(@PathVariable Long userId){
        return demoUserService.startProcess(userId);
    }

    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  完成一个流程
     * @date： 2022/4/3 20:09
     */
    @GetMapping("{userId}/complateInstance")
    public String complateInstance(@PathVariable(value = "userId") String userId,String taskId){
        return demoUserService.complateInstance(userId,taskId);
    }

    /**
     * @author： hj
     * @version： 1.0
     * @methodDes：  查看流程详情
     * @date： 2022/4/3 21:10
     */
    @GetMapping("{taskId}/instanceDetail")
    public String instanceDetail(@PathVariable String taskId){
        return demoUserService.instanceDetail(taskId);
    }































}
